/*
 * Copyright (c) 2022 FuZhou Lockzhiner Electronic Co., Ltd. All rights reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * 软件定时器 => 用于定时启动某些任务
 */
#ifndef _SWTMR_H
#define _SWTMR_H

#include "los_swtmr.h"

typedef int  (*pswtmr_getid)(void*, char*, uint32_t*, uint8_t *);
typedef int  (*pswtmr_get_start_state)(void *, char *);
typedef void (*pswtmr_start)(void*, char*);
typedef void (*pswtmr_stop)(void*, char*);
typedef int  (*pswtmr_init)(unsigned int, SWTMR_PROC_FUNC, char*, unsigned int*);

#define   SWTMR_CNT_MAX         10

typedef struct {
    uint32_t                    id;
    char                        *name;
    uint8_t                     start_flag;            // 启动标志1启动
} swtmrid_t;

typedef struct {
    swtmrid_t                   time[SWTMR_CNT_MAX];
    uint8_t                     cnt;
    void *                      args;
    
    pswtmr_getid                getid_fn;
    pswtmr_get_start_state      get_start_state_fn;
    pswtmr_start                start_fn;
    pswtmr_stop                 stop_fn;
    pswtmr_init                 init_fn;
} swtmr_t;


/***************************************************************
* 函数名称: swtmr_start
* 说    明: 软件定时器开始
* 参    数:
*       @tmr        定时器
*       @name       名称
*       @id         返回id号
*       @index      返回定时器硬件序号
* 返 回 值: 0为成功，反之为失败
***************************************************************/
int swtmr_getid(void *tk, char *name, uint32_t *id, uint8_t *index);


/***************************************************************
* 函数名称: swtmr_get_start_state
* 说    明: 软件定时器状态
* 参    数:
*       @tmr        定时器
*       @name       名称
* 返 回 值: 返回1为已启动， 返回0为未启动， 返回-1为不存在
***************************************************************/
int swtmr_get_start_state(void *tmr, char *name);


/***************************************************************
* 函数名称: swtmr_start
* 说    明: 软件定时器开始
* 参    数:
*       @tmr        定时器
*       @name       名称
* 返 回 值: 无
***************************************************************/
void swtmr_start(void *tmr, char *name);


/***************************************************************
* 函数名称: swtmr_stop
* 说    明: 软件定时器停止
* 参    数:
*       @tmr        定时器
*       @name       名称
* 返 回 值: 无
***************************************************************/
void swtmr_stop(void *tmr, char *name);


/***************************************************************
* 函数名称: swtmr_init
* 说    明: 软件定时器初始化
* 参    数:
*       @period     时钟周期
*       @fn         处理函数
*       @name       名称
*       @args       参数
* 返 回 值: 0为成功，反之为失败
***************************************************************/
int swtmr_init(unsigned int period, SWTMR_PROC_FUNC fn, char *name, unsigned int *args);


#endif // _SWTMR_H